package base.system;

import java.io.IOException;

/**
 * vm environment variables: JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n
 * 模拟远程服务器，这里是启动，不是debug运行
 * 模拟客户端连接：Run -> Attach to process -> 选择刚刚运行的端口号
 * 子进程jdb：Run -> Attach to process -> 选择jdb的端口号
 *
 * 服务器端console输入任意字符，跳转到客户端的debug处，计算器调试输入：
 * process.getOutputStream().write("hello\n".getBytes());
 * process.getOutputStream().flush();
 *
 * TTY类的属性 private static final String progname = "jdb";即jdb的具体实现
 * 搜索TTY.java在763行if (ln == null) 打上断点，此时执行计算器的执行操作，
 * 进入子进程的断点，ln显示内容为hello字符串，说明远程debug成功并进入到了断点
 */
public class AttachDebug {
    public static void main(String[] args) throws IOException {
        Process process = Runtime.getRuntime().exec("/Library/Java/JavaVirtualMachines/jdk-11.0.12.jdk/Contents/Home/bin/jdb");
        while (true) {
            System.in.read();
        }
    }
}
